package parser;

import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.xml.sax.SAXException;

import java.io.IOException;

/**
 * Author:shixiaojun@itany.com
 * Date:2022/4/21 14:22
 * Version:1.0-SNAPSHOT
 * Description:
 */
public class DigesterParser {

    public static void main(String[] args) {
        // 解析rule.xml文件,将XML中的元素与Java对象关联在一起,并返回对应的解析器
        Digester digester = DigesterLoader.createDigester(DigesterParser.class.getClassLoader().getResource("parser/rule.xml"));

        // 准备一个空的对象交给解析器
        // 该对象将会与XML的根标签进行映射
        ClassBean classBean = new ClassBean();
        // 将Java对象交给解析器
        digester.push(classBean);

        try {
            // 开始解析
            // 解析后会自动将解析的所有数据存放到与之映射的Java对象中
            // 即交给解析器的Java对象
            System.out.println("解析前:"+classBean);
            digester.parse(DigesterParser.class.getClassLoader().getResourceAsStream("students.xml"));
            System.out.println("解析后:"+classBean);
            System.out.println("班级号:"+classBean.getNo());
            System.out.println("学号为1的学生姓名:"+classBean.findStudent("1").getName());
            System.out.println("学号为2的学生姓名:"+classBean.findStudent("2").getName());
            System.out.println("学号为2的学生性别:"+classBean.findStudent("2").getGender());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }


    }

}
